#include "BulletSoftBody/BulletReducedDeformableBody/btReducedDeformableContactConstraint.h"
#ifdef __cplusplus
extern "C" {
#endif
btReducedDeformableStaticConstraint* bullet_NewbtReducedDeformableStaticConstraint(btReducedDeformableBody* rsb,btSoftBody::Node* node,btVector3* ri,btVector3* x0,btVector3* dir,btContactSolverInfo* infoGlobal,double dt){
	btReducedDeformableBody * c_arg_rsb=(btReducedDeformableBody *)(void*)(rsb);
	btSoftBody::Node * c_arg_node=(btSoftBody::Node *)(void*)(node);
	btVector3 const& c_arg_ri=(btVector3 const&)(*ri);
	btVector3 const& c_arg_x0=(btVector3 const&)(*x0);
	btVector3 const& c_arg_dir=(btVector3 const&)(*dir);
	btContactSolverInfo const& c_arg_infoGlobal=(btContactSolverInfo const&)(*infoGlobal);
	btScalar c_arg_dt=dt;
	btReducedDeformableStaticConstraint* wrap_out = new btReducedDeformableStaticConstraint(c_arg_rsb,c_arg_node,c_arg_ri,c_arg_x0,c_arg_dir,c_arg_infoGlobal,c_arg_dt);
	return wrap_out;
}

btReducedDeformableStaticConstraint* bullet_NewbtReducedDeformableStaticConstraint1(){
	btReducedDeformableStaticConstraint* wrap_out = new btReducedDeformableStaticConstraint();
	return wrap_out;
}

btVector3* bullet_btReducedDeformableStaticConstraint_getDeltaVa(btReducedDeformableStaticConstraint* c_this){
	btVector3 c_out = c_this->getDeltaVa();
	btVector3* wrap_out = new btVector3(c_out);
	return wrap_out;
}

double bullet_btReducedDeformableStaticConstraint_GetFieldOfM_appliedImpulse(btReducedDeformableStaticConstraint* c_this){
	return (double)(c_this->m_appliedImpulse);
}

double bullet_btReducedDeformableStaticConstraint_GetFieldOfM_dt(btReducedDeformableStaticConstraint* c_this){
	return (double)(c_this->m_dt);
}

double bullet_btReducedDeformableStaticConstraint_GetFieldOfM_erp(btReducedDeformableStaticConstraint* c_this){
	return (double)(c_this->m_erp);
}

btVector3* bullet_btReducedDeformableStaticConstraint_GetFieldOfM_impulseDirection(btReducedDeformableStaticConstraint* c_this){
	return (btVector3*)(&c_this->m_impulseDirection);
}

double bullet_btReducedDeformableStaticConstraint_GetFieldOfM_impulseFactor(btReducedDeformableStaticConstraint* c_this){
	return (double)(c_this->m_impulseFactor);
}

btMatrix3x3* bullet_btReducedDeformableStaticConstraint_GetFieldOfM_impulseFactorMatrix(btReducedDeformableStaticConstraint* c_this){
	return (btMatrix3x3*)(&c_this->m_impulseFactorMatrix);
}

double bullet_btReducedDeformableStaticConstraint_GetFieldOfM_rhs(btReducedDeformableStaticConstraint* c_this){
	return (double)(c_this->m_rhs);
}

btVector3* bullet_btReducedDeformableStaticConstraint_GetFieldOfM_ri(btReducedDeformableStaticConstraint* c_this){
	return (btVector3*)(&c_this->m_ri);
}

btVector3* bullet_btReducedDeformableStaticConstraint_GetFieldOfM_targetPos(btReducedDeformableStaticConstraint* c_this){
	return (btVector3*)(&c_this->m_targetPos);
}

void bullet_btReducedDeformableRigidContactConstraint_calculateTangentialImpulse(btReducedDeformableRigidContactConstraint* c_this,double* deltaImpulse_tangent,double* appliedImpulse,double rhs_tangent,double tangentImpulseFactorInv,btVector3* tangent,double lower_limit,double upper_limit,btVector3* deltaV_rel){
	btScalar& c_arg_deltaImpulse_tangent=(btScalar&)(*deltaImpulse_tangent);
	btScalar& c_arg_appliedImpulse=(btScalar&)(*appliedImpulse);
	btScalar const c_arg_rhs_tangent=rhs_tangent;
	btScalar const c_arg_tangentImpulseFactorInv=tangentImpulseFactorInv;
	btVector3 const& c_arg_tangent=(btVector3 const&)(*tangent);
	btScalar const c_arg_lower_limit=lower_limit;
	btScalar const c_arg_upper_limit=upper_limit;
	btVector3 const& c_arg_deltaV_rel=(btVector3 const&)(*deltaV_rel);
	c_this->calculateTangentialImpulse(c_arg_deltaImpulse_tangent,c_arg_appliedImpulse,c_arg_rhs_tangent,c_arg_tangentImpulseFactorInv,c_arg_tangent,c_arg_lower_limit,c_arg_upper_limit,c_arg_deltaV_rel);
}

btVector3* bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_angularComponentNormal(btReducedDeformableRigidContactConstraint* c_this){
	return (btVector3*)(&c_this->m_angularComponentNormal);
}

btVector3* bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_angularComponentTangent(btReducedDeformableRigidContactConstraint* c_this){
	return (btVector3*)(&c_this->m_angularComponentTangent);
}

double bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_appliedNormalImpulse(btReducedDeformableRigidContactConstraint* c_this){
	return (double)(c_this->m_appliedNormalImpulse);
}

double bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_appliedTangentImpulse(btReducedDeformableRigidContactConstraint* c_this){
	return (double)(c_this->m_appliedTangentImpulse);
}

double bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_appliedTangentImpulse2(btReducedDeformableRigidContactConstraint* c_this){
	return (double)(c_this->m_appliedTangentImpulse2);
}

btVector3* bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_bufferVelocityA(btReducedDeformableRigidContactConstraint* c_this){
	return (btVector3*)(&c_this->m_bufferVelocityA);
}

btVector3* bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_bufferVelocityB(btReducedDeformableRigidContactConstraint* c_this){
	return (btVector3*)(&c_this->m_bufferVelocityB);
}

double bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_cfm(btReducedDeformableRigidContactConstraint* c_this){
	return (double)(c_this->m_cfm);
}

double bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_cfm_friction(btReducedDeformableRigidContactConstraint* c_this){
	return (double)(c_this->m_cfm_friction);
}

bool bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_collideMultibody(btReducedDeformableRigidContactConstraint* c_this){
	return (bool)(c_this->m_collideMultibody);
}

bool bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_collideStatic(btReducedDeformableRigidContactConstraint* c_this){
	return (bool)(c_this->m_collideStatic);
}

btVector3* bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_contactNormalA(btReducedDeformableRigidContactConstraint* c_this){
	return (btVector3*)(&c_this->m_contactNormalA);
}

btVector3* bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_contactNormalB(btReducedDeformableRigidContactConstraint* c_this){
	return (btVector3*)(&c_this->m_contactNormalB);
}

btVector3* bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_contactTangent(btReducedDeformableRigidContactConstraint* c_this){
	return (btVector3*)(&c_this->m_contactTangent);
}

btVector3* bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_contactTangent2(btReducedDeformableRigidContactConstraint* c_this){
	return (btVector3*)(&c_this->m_contactTangent2);
}

double bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_dt(btReducedDeformableRigidContactConstraint* c_this){
	return (double)(c_this->m_dt);
}

double bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_erp(btReducedDeformableRigidContactConstraint* c_this){
	return (double)(c_this->m_erp);
}

double bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_erp_friction(btReducedDeformableRigidContactConstraint* c_this){
	return (double)(c_this->m_erp_friction);
}

double bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_friction(btReducedDeformableRigidContactConstraint* c_this){
	return (double)(c_this->m_friction);
}

btMatrix3x3* bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_impulseFactor(btReducedDeformableRigidContactConstraint* c_this){
	return (btMatrix3x3*)(&c_this->m_impulseFactor);
}

btVector3* bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_linearComponentNormal(btReducedDeformableRigidContactConstraint* c_this){
	return (btVector3*)(&c_this->m_linearComponentNormal);
}

btVector3* bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_linearComponentTangent(btReducedDeformableRigidContactConstraint* c_this){
	return (btVector3*)(&c_this->m_linearComponentTangent);
}

int bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_nodeQueryIndex(btReducedDeformableRigidContactConstraint* c_this){
	return (int)(c_this->m_nodeQueryIndex);
}

double bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_normalImpulseFactor(btReducedDeformableRigidContactConstraint* c_this){
	return (double)(c_this->m_normalImpulseFactor);
}

btVector3* bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_relPosA(btReducedDeformableRigidContactConstraint* c_this){
	return (btVector3*)(&c_this->m_relPosA);
}

btVector3* bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_relPosB(btReducedDeformableRigidContactConstraint* c_this){
	return (btVector3*)(&c_this->m_relPosB);
}

double bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_rhs(btReducedDeformableRigidContactConstraint* c_this){
	return (double)(c_this->m_rhs);
}

double bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_rhs_tangent(btReducedDeformableRigidContactConstraint* c_this){
	return (double)(c_this->m_rhs_tangent);
}

double bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_rhs_tangent2(btReducedDeformableRigidContactConstraint* c_this){
	return (double)(c_this->m_rhs_tangent2);
}

btSolverBody** bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_solverBody(btReducedDeformableRigidContactConstraint* c_this){
	return (btSolverBody**)(&c_this->m_solverBody);
}

int bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_solverBodyId(btReducedDeformableRigidContactConstraint* c_this){
	return (int)(c_this->m_solverBodyId);
}

double bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_tangentImpulseFactor(btReducedDeformableRigidContactConstraint* c_this){
	return (double)(c_this->m_tangentImpulseFactor);
}

double bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_tangentImpulseFactor2(btReducedDeformableRigidContactConstraint* c_this){
	return (double)(c_this->m_tangentImpulseFactor2);
}

double bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_tangentImpulseFactorInv(btReducedDeformableRigidContactConstraint* c_this){
	return (double)(c_this->m_tangentImpulseFactorInv);
}

double bullet_btReducedDeformableRigidContactConstraint_GetFieldOfM_tangentImpulseFactorInv2(btReducedDeformableRigidContactConstraint* c_this){
	return (double)(c_this->m_tangentImpulseFactorInv2);
}

void bullet_btReducedDeformableRigidContactConstraint_setSolverBody(btReducedDeformableRigidContactConstraint* c_this,int bodyId,btSolverBody* solver_body){
	int const c_arg_bodyId=bodyId;
	btSolverBody& c_arg_solver_body=(btSolverBody&)(*solver_body);
	c_this->setSolverBody(c_arg_bodyId,c_arg_solver_body);
}

btReducedDeformableNodeRigidContactConstraint* bullet_NewbtReducedDeformableNodeRigidContactConstraint(btReducedDeformableBody* rsb,btSoftBody::DeformableNodeRigidContact* contact,btContactSolverInfo* infoGlobal,double dt){
	btReducedDeformableBody * c_arg_rsb=(btReducedDeformableBody *)(void*)(rsb);
	btSoftBody::DeformableNodeRigidContact const& c_arg_contact=(btSoftBody::DeformableNodeRigidContact const&)(*contact);
	btContactSolverInfo const& c_arg_infoGlobal=(btContactSolverInfo const&)(*infoGlobal);
	btScalar c_arg_dt=dt;
	btReducedDeformableNodeRigidContactConstraint* wrap_out = new btReducedDeformableNodeRigidContactConstraint(c_arg_rsb,c_arg_contact,c_arg_infoGlobal,c_arg_dt);
	return wrap_out;
}

btReducedDeformableNodeRigidContactConstraint* bullet_NewbtReducedDeformableNodeRigidContactConstraint1(){
	btReducedDeformableNodeRigidContactConstraint* wrap_out = new btReducedDeformableNodeRigidContactConstraint();
	return wrap_out;
}

btSoftBody::DeformableNodeRigidContact* bullet_btReducedDeformableNodeRigidContactConstraint_getContact(btReducedDeformableNodeRigidContactConstraint* c_this){
	btSoftBody::DeformableNodeRigidContact const * c_out = c_this->getContact();
	btSoftBody::DeformableNodeRigidContact* wrap_out = (btSoftBody::DeformableNodeRigidContact*)(void*)(c_out);
	return wrap_out;
}

btSoftBody::Node** bullet_btReducedDeformableNodeRigidContactConstraint_GetFieldOfM_node(btReducedDeformableNodeRigidContactConstraint* c_this){
	return (btSoftBody::Node**)(&c_this->m_node);
}

btSoftBody::DeformableFaceRigidContact* bullet_btReducedDeformableFaceRigidContactConstraint_getContact(btReducedDeformableFaceRigidContactConstraint* c_this){
	btSoftBody::DeformableFaceRigidContact const * c_out = c_this->getContact();
	btSoftBody::DeformableFaceRigidContact* wrap_out = (btSoftBody::DeformableFaceRigidContact*)(void*)(c_out);
	return wrap_out;
}

btSoftBody::Face** bullet_btReducedDeformableFaceRigidContactConstraint_GetFieldOfM_face(btReducedDeformableFaceRigidContactConstraint* c_this){
	return (btSoftBody::Face**)(&c_this->m_face);
}

bool bullet_btReducedDeformableFaceRigidContactConstraint_GetFieldOfM_useStrainLimiting(btReducedDeformableFaceRigidContactConstraint* c_this){
	return (bool)(c_this->m_useStrainLimiting);
}

#ifdef __cplusplus
}
#endif
